package com.medsys.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import com.medsys.model.Paciente;
import com.medsys.model.Receituario;

/**
 * Classe respos�vel pela persistencia de dados da classe {@link Paciente}.
 * @author Felipe Lauksas
 *
 */
public class ReceituarioDAO extends BaseDAO {
	/**
	 * Contrutor com parametro da sess�o j� iniciada
	 * @param session criada por {@link DAOFactory}.
	 */
	public ReceituarioDAO(Session session) {
		super(session);		
	}	
	
	/**
	 * M�todo para salvar um objeto do tipo {@link Paciente} no banco de dados.
	 * @param paciente do tipo {@link Paciente}.
	 * @return {@link Paciente} persistido.
	 * @throws Exception
	 */
	public Receituario salvar (Receituario receituario) throws Exception{
		try {
			receituario = (Receituario) this.session.merge(receituario);
		} catch (HibernateException e) {			
			throw new Exception(e);
		}
		return receituario;
	}
	/**
	 * M�todo para alterar um objeto do tipo {@link Receituario} no banco de dados.
	 * @param receituario do tipo {@link Receituario}.
	 * @throws Exception
	 */
	public void alterar(Receituario receituario) throws Exception{
		try {
			this.session.update(receituario);
		} catch (HibernateException e) {			
			throw new Exception(e);
		}
	}
	/**
	 * M�todo para listar todos os objetos do tipo {@link Receituario} existentes no banco de dados.
	 * @return {@link List} com objetos {@link Receituario}.
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public List<Receituario> listarTodos() throws Exception{
		
		List<Receituario> listReceituarios = null;
		
		try {
			
			//listReceituarios = this.session.createCriteria(Receituario.class).list();
			Query query = this.session.createQuery("select rt from Receituario rt join fetch rt.consulta");
			listReceituarios =  query.list();
			
		} catch (HibernateException e) {			
			
			throw new Exception(e);
		}
		return listReceituarios;
	}
	
	/**
     * Pesquisa um receituario pela sua chave
     * @param Integer id
     * @return {@link Receituario} receituario
     */
    public Receituario pesquisarPorId(Serializable id)throws Exception{   
    	
    	Receituario receituario = null;
    	
        try {
        	
			receituario = (Receituario) this.session.get(Receituario.class, id);
			
		} catch (HibernateException e) {			
			
			throw new Exception(e);
		}
		
		return receituario;
    }    
}
